package xiangya.bysj.mapper.interf;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import xiangya.bysj.entity.HistoryTakeCache;
import xiangya.bysj.entity.TakeCycle;
import xiangya.bysj.entity.TakeInfo;

/**
 * takeinfo数据操作的mapper类
 * 
 * @author Mr.zhang
 *
 */
public interface TakeInfoMapper extends MapperInterface<TakeInfo> {
	/**
	 * 批量添加服药信息
	 * 
	 * @param list
	 *            服药信息list集合
	 * @throws Exception
	 */
	public void saveBatch(List<TakeInfo> list) throws Exception;

	/**
	 * 根据服药者的id获取其所有的服药信息
	 * 
	 * @param patientId
	 *            服药者id
	 * @return 返回服药信息的list集合
	 * @throws Exception
	 */
	public List<TakeInfo> getByPatientId(@Param("patientId") int patientId, @Param("todayDate") String todayDate)
			throws Exception;

	/**
	 * 批量添加服药周期
	 * 
	 * @param list
	 *            服药周期集合
	 * @throws Exception
	 */
	public void saveCycleBatch(List<TakeCycle> list) throws Exception;

	/**
	 * 单个添加服药周期
	 * 
	 * @param takeCycle
	 *            服药周期
	 * @throws Exception
	 */
	public void saveCycle(TakeCycle takeCycle) throws Exception;

	/**
	 * 删除服药周期
	 * 
	 * @param cycleId
	 *            服药周期id
	 * @throws Exception
	 */
	public void deleteCycle(int cycleId) throws Exception;

	/**
	 * 通过服药信息Id删除周期
	 * 
	 * @param TkId
	 *            cycle所引用的服药信息Id
	 * @throws Exception
	 */
	public void deleteCycleByTkId(int TkId) throws Exception;

	/**
	 * 获取当天日期属于服药周期之类的服药信息。（通过这写信息生成历史服药记录）
	 * 
	 * @param nowDate
	 *            当天日期
	 * @return list集合
	 * @throws Exception
	 */
	public List<HistoryTakeCache> selectByNowDate(@Param("nowDate") String nowDate, @Param("from") int from,
			@Param("number") int number) throws Exception;

	/**
	 * 根据id获取服药信息
	 * 
	 * @param takeinfoId
	 *            服药信息的id
	 * @return 服药信息对象
	 * @throws Exception
	 */
	public TakeInfo selectById(int takeinfoId) throws Exception;

	/**
	 * 根据服药信息的id查询服药周期
	 * 
	 * @param takeinfoId
	 *            服药信息id
	 * @return 返回list集合
	 * @throws Exception
	 */
	public List<TakeCycle> selectCycleByTakeInfoId(int takeinfoId) throws Exception;

	/**
	 * 根据患者id数组获取服药信息
	 * 
	 * @param patientIds
	 *            id数组
	 * @param todayDate
	 *            今天的日期 （上述两个参数都是必须的）
	 * @return
	 * @throws Exception
	 */
	public List<TakeInfo> selectByPatientIds(@Param("patientIds") int[] patientIds,
			@Param("todayDate") String todayDate) throws Exception;

	/**
	 * 获取服药信剩余药量
	 * 
	 * @param tkId
	 *            服药信息id
	 * @return 数量
	 * @throws Exception
	 */
	public int selectAmount(int tkId) throws Exception;

	/**
	 * 根据患者id获取他们所有的服药信息
	 * 
	 * @param patientIds
	 *            患者id数组
	 * @return list集合
	 * @throws Exception
	 */
	public List<TakeInfo> selectAllByPatientIds(int[] patientIds) throws Exception;
}
